今天來了解一下Scaffold產生的Create
我們進入到Controller內可以看到有兩個Create的Action,註解上可以發現一個是GET方法一個是POST方法
// GET
public ActionResult Create()
{
return View();
}
// POST
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
GET方法的Create
這個Create是當我們進入到Create頁面在使用的,就是一個空白的表單讓USER輸入資料
POST方法的Create
這個Create是當表單填寫完送出之後在使用的,而且只接受HTTP POST傳過來的資料
這樣的一個運作方式又可以稱為動作過濾器
進入到View我們可以看到跟Index一樣,由@model開頭的第一行,宣告此頁面所使用的模型
@model IEnumerable<FirstProject.Models.ModelName>
接著是MVC的表單宣告
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Guestbook</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.姓名, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.姓名, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.姓名, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.內容, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.內容, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.內容, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
@using (Html.BeginForm())
這是一個輔助方法,會輸出標籤,必須以using包覆起來,這樣當程式碼結束後系統會自動補上
所以這張表單最終會變成
<form action="/Controller/Action" method="post">
表單內容
</form>
@Html.AntiForgeryToken()
這一段是用來預防跨站攻擊(CSRF),至於跨站攻擊的原理請有興趣的鐵友Google一下
@Html.ValidationSummary()
這段是用來顯示當表單欄位驗證失敗要顯示的錯誤訊息
@Html.LabelFor()
用來顯示特定的欄位名稱
以HTML來顯示就等同於
<label for="">lable name</label>
@Html.EditorFor()
用來輸出表單欄位,如同HTML的
<input class="" type="text" value="" name=""/>
@Html.ValidationMessageFor()
顯示欄位驗證的錯誤訊息,驗證來源是依據Model上的定義